﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Objects;
using ModelLayer;
using ModelAccess;
using System.Collections.ObjectModel;
using System.Reflection;
using System.Data.SqlClient;
namespace ModelAccess.Concrete
{
    public class UtentiHelper : ModelAccess.AbstractHelper
    {
        public UtentiHelper() : base("Utenti") { }
        public UtentiHelper(AbstractHelper ah) : base("Utenti", ah) { }
        public void saveChanges(Utente utente)
        {

            ctx.Utenti.ApplyChanges(utente);
            ctx.SaveChanges();
            
        }

        public Utente getUtente(String username)
        {
            Utente autheticatedUser = null;

            autheticatedUser = (from u in ctx.Utenti.Include("GRUPPO").Include("COMPAGNIA")
                                where u.Username.Equals(username)
                                select u).FirstOrDefault();


            return autheticatedUser;
        }

        public Utente getRisposteUtente(string username)
        {
            Utente user = null;

            user = (from u in ctx.Utenti.Include("RISPOSTE.ANAGRAFICAPESI.COMPETENZA.PADRE.ANAGRAFICAPESI")
                    where u.Username.Equals(username)
                    select u).FirstOrDefault();


            return user;
        }

        public Sessione getSessioneAperta(String username)
        {
            Sessione sessione = null;

            sessione = (from u in ctx.Sessioni.Include("StatoSessione")
                        where u.Utente.Username.CompareTo(username) == 0 && u.Aperto.CompareTo("A") == 0
                        select u).FirstOrDefault();


            return sessione;
        }

        public void storicizzaModello(Sessione s, int nuovoStato)
        {

            ctx.Storicizza(s.Utente.Username, nuovoStato, s.Id);

        }
        public void deleteUtente(Utente u)
        {
           ctx.eliminaUtente(u.Username);
        }

        public List<Utente> getUtentiCompagnia(Utente utente)
        {
            List<Sessione> sessioni = (from s in ctx.Sessioni.Include("StatoSessione") where s.Utente.Compagnia.Id==utente.Compagnia.Id && s.Aperto.CompareTo("A") == 0 select s).ToList();
            List<Utente> utenti = (from u in ctx.Utenti where u.Compagnia.Id == utente.Compagnia.Id select u).ToList();
           
           return utenti;
        }


    }
}
